プログラミングやRPG(作るほう)が好きな人の日記
このホームページは毎日 夜11時にアクセスできなくなります。朝6時半に再開されます。
(世の中のネット依存対策として)
人物イラストを描く際、人体のS字カーブ(骨格)というものを意識して描くと、本物に近くなる…ということで「人体 S字」で検索していて面白サイトを見つけました。
「身体の骨がS字」という話ではなく、「ポーズをS字に」という話のサイトです。
面白いのは最初の画像です。
左側の画像だと、おっぱいも「ただ無駄にくっついてるだけ」という感じがしますが、
右側の画像だと、あきらかに生かされてる感じです。
骨格のS字の他にポーズのS字も考慮して人物イラストを描くと良いかもしれません。
「3DCGのモデリングで、人間の頭はどうやってモデリングするのか?」と思って3年前くらいにこういう本を購入しました。
「キャラクターモデリング造形力矯正バイブル第2版」~へたくそスパイラルからの脱出!!~
田島キヨミ 著/ボーンデジタル 刊(2016年)/4000円+税
左の画像リンクをクリックすると 画像を拡大 します。
そして3年間ほど私の埋蔵図書館(買ったけど読んでいない)に埋もれていましたが、最近になって、その本を見ながらモデリングを始めました。
この本、どこか足りない初心者の作品に対して「へたくそ!」という言葉を連発しています。
しかし、反面、懇切丁寧な説明で、ポリゴンモデリングがほとんど初めての私でも左図のようなモデルを作ることができました。(途中のもので まだちょっとおかしいですが)
ただ、「誰でもできる」というわけではなく、この本のP76の「本当のモデリングはここから始まる。」と書かれたあたりから、本の指示だけではなく「自分の技巧の力」も必要になってきます。さらに、P81のくちびるをモデリングするあたりはもっと難度が上がって難しく、時間がかかりました。
そういう難しいところも、ポリゴンの面の流れをわかりやすく図示してくれたりしていてとても助かります。
でも大事なのは、そういう「いつまでもいじり、時間がかかってる」というヘタモデラ―の特徴について、この本は答えを出している、というところです。(P182「目鼻口を作り終わっても…」)
「どうやったら上手にモデリングできるのか?」(どうして下手なのか?)という問題について、著者の経験(学校で1000人以上の生徒のモデリングを見てきた)に基づいてひとつの回答を出してくれています。(P67「カメラを回してみるものは…」やP181、P189「自分がなぜ下手なのか…」等)
「表面的に物をとらえて作成されたモデリングは、見る人を納得させることができない」
モデリングに限らずどんな創作にも言えそうなことを本書の中で一貫して語っていて、単にモデリングのテクニックを教えているだけではない 先生そのものみたいな一冊です。
おかげで、まだ途中ですが、できなかった人間の頭のモデリングができました。どうもありがとう。
左の画像リンクをクリックすると 画像を拡大 します。
↓ ↓ ↓
本の説明では、私が作業している現時点で、「仮の眼球を入れて、まぶたを作りましょう」という話になっています。
上の2つの画像の上のほうはその本の説明のままに作った眼球です。死んではいないけど多少死んだような目になっています。
本の中で「(仮の眼球ではなく)最終的には2重構造にし、瞳部分は凹ませて、角膜部分は凸状態にしてガラスのように作ると美しい」と書かれていて、私は「それがイイ」と思って今の時点でその通りにして作りました。それが2つめのほうの画像です。目がキラキラしてます。
これは私が以前 日記で書いた「ラブリーメソッド」なのであって、創作の途中で部分的に魅力的にすることで創作にエンジンがかかります。
肌の色も本のほうでは現時点で灰色ですが、私は頭を作ってる段階で肌色にしました。
「本のとおりの仮眼球」と、「ガラスのように作ると美しい - 間違えた例」と、「ガラスのように作ると美しい - 正しい例」の3種類の眼球を詳しく比べてみましょう。
それでこの後はまぶたを作ることになっています。
「キャラクターモデリング造形力矯正バイブル第2版」という本は、著者の仕事 として確かに読者が上手になれるように、という感じのする仕事人の方が書いた本です。専門学校には行けないけどモデリングを勉強したい!という人におすすめです。へたくそ!私はウマモデラーだ!教えてあげよう!という言葉がたくさん出てきますが、そういうのが苦手な人はあらかじめそういうのがあると知っていれば大丈夫じゃないかな?私は著者に直にあって指南してもらえたらいいなと思いました。
※この本では Maya というプロ向けの 3DCG ソフトを使って説明していますが、私は以前日記で書いた通り Shade3D Ver17 Basic のユーザーです。Maya と同じ機能、似た機能を Shade3D のなかで探しながらモデリングしています。
(訪問者のどんなニーズと この記事がつながるか)
今年2019年2月にPROJECT EGG から発売された「ソーサリアン・コンプリート Windows10対応版」(9,801円)に同梱の音楽CD『SORCERIAN COMPLETE -RARE SELECTION-』の私なりの評価が完了したので公開します。
このCDは主に、ソーサリアンというゲームソフトに後から追加されたシナリオ(そのなかでもTAKERUというソフトウェア自動販売機で販売されたもの)の楽曲で構成されています。
評価方法は、PCの音質設定をすべてオフにしてiTunesのイコライザをFlatにし、密閉型のイヤホンで聴いて評価しています。1曲をその時間で5等分して、5等分した各部分を5段階評価し、その数字を時間の並びのまま並べて5桁の数字にしたものが下図(iTunes画面)のコメント列に並んでいます。その列で降順に並べると、高評価ほど上にランクインします。(45555よりは51111のほうが高評価になってしまう問題があるが、まれなのでそんなに問題にならない)
評価2が基準で、評価2は「良くも悪くもない」という意味です。全97曲を評価しましたが、上位53曲までを掲載し、それ以下44曲は割愛しました。実際の作曲者がこのページを読む可能性が0ではないからです。複数の作曲者がいる中、自分の曲が最低ランクになっているのを見て悲しむという場合もあるでしょう。
評価は私の気まぐれで常に修正が加えられるので、今日評価4でも後日3に落としたりと常に変動します。
5桁の数字の右端の記号の意味:
+ : 5段階評価とは別に、どこか芸術的な良さを感じる曲に付与
- : 5段階評価とは別に、残念なところがある曲に付与
b : 5段階評価とは別に、ゲームのBGMとして効果的であると思った曲に付与
ソーサリアンのメインスタッフではなく、サードパーティーのスタッフが製作したシナリオ、楽曲なので、「ほとんどいまいちもありえる…」なんて構えていましたが、聴いてみれば、メインシナリオの楽曲に匹敵するBGM(高評価)が12曲もありました。
念のため言っておきますが、ファルコムの楽曲は当時のPCゲームの中ではレベル(音色やメロディの質)が高く、仮に「22222」のような評価をしている曲でも、当時の他のPCゲーム(FM音源のプリセット音色を使っているような曲)から比べれば、だいぶ聴ける曲です。
全97曲を聴いて思ったのは、音色がメインシナリオのもの(いわゆるファルコム音色)を使っているようで、どこか「イース」っぽい曲もありました。
しかし、各シナリオの「シナリオクリア」の評価がどれも低めなのが気になりました(私の評価ですが)。どれもエンディングらしい曲にはなっているけど「いいな」とはあまり思わなかった感じです。
ちなみにこのリストでトップの「時の神殿 ネガティル1」は、私が持っているメインシナリオの楽曲56曲の中では14位の評価になっています。
iPodに入れるゲーム音楽のレパートリーが増えてよかったです。
(訪問者のどんなニーズと この記事がつながるか)
グラディウスVのスーパープレイ動画の最後のボスの出現時、画面全体がユラユラと揺れます。
このユラユラはどうやるのか…と思ってやってみたのが今月の冒頭コンテンツです。
ふつうにmp4動画をHTMLの背後に置いているだけであって、JavaScriptでレンダリングしてユラユラして…というようなことはしていません。
3DCGモデリングソフトで、板状のものをうまく波打つように加工して、その材質をレンズっぽく透明化(透明化+屈折率)し、背後ににゃんこを置きます。レンズ板を回転させれば、冒頭コンテンツの出来上がりです。
▲レンズ板を回転させるとユラユラになる
(訪問者のどんなニーズと この記事がつながるか)
電子機器組み立て1,2級の「省エネコントローラー」。
私は作業(正確さ、スピード)が苦手ということで、回路の理解を深めることで力にしようとしています。
今回は「単安定マルチバイブレータ回路」を見てみます。
「単安定」とは、基本的に波形の下の状態で波形は安定していて、なにかイベントがあると一時的に波形が上のほうに上がるという意味のようです。前回は「無安定」で、上にも下にも安定することなく、常に上下運動を繰り返すというもの(振動、発振、交流波形)でした。ほかに「双安定」というものがあり、上か下かどちらかの状態を保つというもので、コンピューターのメモリ(ビットが1か0かを記憶する)に使われるそうです。
▼「省エネコントローラー」ブロック図。今回は緑色で示した部分です。白い部分は前回、前々回です。
▼「省エネコントローラー」回路図。この明るい部分を実験します。
▼上図明るい部分の実体配線図です。
▼上図実体配線図のとおりに作成した電子回路です。
ICの入力 Trigger は "負論理"(通常は入力ハイで動作するところ、入力ローで動作する) なので、入力のない状態を5Vとし、入力のある状態を0Vとします。
▼ボタンを押さない状態の入力(約5V) | ▼ボタンを押した状態の入力(約0V) |
波打つような波形ならオシロスコープは特に何もしないでも波形を表示してくれますが、1回飛び上がるだけという波形の場合は、オシロスコープの「トリガ」という機能を使って、その飛び上がりの瞬間をつかまえる、という設定が必要になります。ここでは説明しませんが、それがオシロスコープの面白いところの1つなので、使い方を習得すると良いと思います。
▼ボタンを押すとこのような波形になった | ▼波形の幅を測ると、3.48s | ▼波形の高さを測ると、4.48V |
これでいいのかな?
ちなみに、最初、ボタンを押してもうまく動かなかったんですが、確認したら「ボタンを押すと短絡(ショート)する」という回路になっていました。
危なかったです。
Wikipediaの「555タイマー」のページによると、この波形の幅は、
で求められるということです。
この R, C が資格試験の回路図ではどの部品に対応しているかと言うと、
▼Wikipediaの回路図 |
▼資格試験の回路図 |
R | R23(300k) |
C | C13(10u) |
そして計算してみると、
実験結果の波形の幅は、3.48s なので、だいたい合っていますね。
この回路は、ボタンの押し方によって動きが変わるところが興味深いです。
ボタンの押し方 | 動き | 考察 |
---|---|---|
1回押す | ハイになり3.3秒でロー | 1瞬押したからといって出力もすぐにローになるのではなく、設定どおり3.3秒間ハイを維持してからローになります。 |
1秒押す | ハイになり3.3秒でロー | 少し長押ししても、設定どおり3.3秒間ハイを維持してからローになります。 押し始めから数えて、3.3秒でした。 |
3秒よりも長い時間押す | 押している間ハイ、 離した瞬間ロー |
押されている間はとにかくハイで、離すと3.3秒は過ぎているのですぐにローになります。 |
オシロスコープ画面再現 JavaScript
▼上表にならって 1回押し、1秒押し、3秒以上押し を試してみてください。(基板写真の緑ボタンを押す)※ウィンドウリサイズすると画面が乱れます
とにかく押されたら 少なくとも3秒はハイにする、という動きをしていますね。
(この JavaScript はオシロスコープの画面の "ROLL" (時間軸設定が長すぎるときは画面スクロールで対応する)など実際のオシロスコープと同一の動きになっています)
電子回路が、しっかりと決められた動きをしていると感じられ、おもしろい!と思いました。
次回は論理回路(制御回路)を見てみます。
(訪問者のどんなニーズと この記事がつながるか)
▲3DCGソフトで作成したモデルをJavaScriptでアニメーションしている
3DCGソフトで作成したモデルを JavaScript で表示することができれば、いろいろ創作の幅が広がると思います。
ここでは3DCGソフトとして、Shade3D を使っていますが、FBX形式の出力ができるものであればどの3DCGソフトでもOKです。
▼Shade3D のモデリング中の画面です。
▼Shade3D でのモデリング結果です。
Shade3Dのファイルメニューから、エクスポート>FBX ... を選び、テキスト形式で .fbx ファイルを出力します。
そして、fbxToJs_converter.cgi という、私が作成した Perl スクリプトで処理すると、theModel.js というファイルが出来上がります。
(Perl スクリプトが .cgi (Web用拡張子) となっていますが、コマンドラインから perl.exe fbxToJs_converter.cgi ~.fbx とするような使い方を想定しています)
theModel.jsは .fbx ファイルの内容を JavaScript のオブジェクトの記述に書き直したテキストファイルです。
fbxのすべての情報をJavaScriptで利用可能になっています。
その .js ファイルを読み込んだのが、最初のアニメです。(アニメはJavaScriptによる独自のプログラムであり、3DCGソフトで作成したアニメではありません)
このアニメで利用している .fbx の内容は頂点座標と面の頂点インデックス(面はどの頂点を使うかという配列)だけです。
JavaScriptでの、ライブラリを使用しない手計算による3DCG描画とはいえ、下図のように、3DCGソフトウェアのレンダリング結果と一致する描画ができています。
▼赤線:JavaScriptが描画。薄い画像:Shade3Dのレンダリング結果。
一連のファイルをまとめたZIPファイルを掲載しておきます。
ZIPファイルの中の fbxToJs_ModelViewer.html というファイルをブラウザで開くと最初のアニメと同じものが表示されます。
fbxToJs_converter.cgi (Webアプリではなくコマンドラインでの実行を想定したスクリプト)を動かすには Perl をインストールする必要があります。
(訪問者のどんなニーズと この記事がつながるか)
「電子機器組み立て1級、2級」という資格は、試験開始と同時に、皆が一斉にトンカチをたたき始めるという、少し変わった資格です。でもそれが電子回路を組み立てる上で結構重要な作業なんです。
トンカチの話はともかく、今回は「無安定マルチバイブレータ回路」と呼ばれている部分について実験してみようと思います。
前回は下図(試験の回路のブロック図)の右上、「比較回路」を実験しました。今回は左下の「無安定マルチバイブレータ回路」です。
「無安定マルチバイブレータ回路」って意味不明な名前ですよね。
「無安定」、「マルチ」、「バイブレータ」をそれぞれ調べてみると…
「バイブレータ」 … "振動するもの、振動器、バイブレーター"(Weblio辞書「vibrator」より)
電子回路で「振動」と言ったら、これ↓です。交流波形ですね。交流波形には形によって種類がありますが、そのうちの「矩形波」です。
「マルチ」 … "矩形波には倍音が多く含まれているため、マルチバイブレータと呼ばれるようになった。"
倍音というのはこういうことです。
これらの倍音を組み合わせると矩形波になる、ということです。(逆に言うと矩形波は、周波数成分で分けると上図のような倍音の波形になるということで、矩形波1つで矩形波ができているわけではない、ということです。意外ですよね)
これらの波形を一度に作るから「マルチ」バイブレータと言う……で良いのかな??
「無安定」 … 上下に揺れている、バイブレータが動いて波形を出している状態を「無安定」と言い、上か下の一方のままの状態を「安定」と言うみたいです。無安定とは交流波形のことなんですね。
というわけで、「無安定マルチバイブレータ回路」っていうのは、「矩形波を出す回路」ということで間違いなさそうです。
電子回路で「波形を出す」と言ったら、セラロックを使うとか、クリスタルを使うとか、信号発生器や発振器を使うとかだと思っていたので、こういう方法でも波形が出せるとは意外でした。
倍音を組み合わせると矩形波になる、というのをシミュレーションする JavaScript を作りましたので、試してみてください。
左の画像リンクをクリックすると JavaScriptを実行 します。
それではたんたんと進めていきます。
下図は「無安定マルチバイブレータ回路」の回路図です。
この回路で作られた波形は下図のように、3か所へ供給されます。
「無安定マルチバイブレータ回路」の回路図を見ながら作った実体配線図です。
1.3MΩや、910KΩは抵抗の組み合わせで実現しました。
1.3MΩ = 1MΩ + 100KΩ + 100KΩ + 100KΩ (直列つなぎ)
910KΩ = 470KΩ + 220KΩ + 220KΩ (直列つなぎ)
自分の持ちあわせの各抵抗を左図のようにExcelの横軸と縦軸に並べて、表計算しておいて、ほしい抵抗値を入力欄に入れると、手持ちの抵抗での並列や直列での実現の組み合わせを示してくれるので便利です。(Excelで「条件付き書式」という機能を使います。少し難しいです)
難しいので参考としてアップロードしておきます。
Excelのファイルはネットワークからダウンロードしたときは、ウイルスチェックをしてくださいね。
20190222-電気/合成抵抗計算.xlsx(216KB)
左の画像リンクをクリックすると 画像を拡大 します。
それぞれ確認
▲1.3MΩ OK | ▲910KΩ OK ちょっとずれてるけどまぁいいか |
そして5V電源を投入すると…
0.693 は何か
0.693は、「2の自然対数」、ln(2) の答えとして上の式に書かれています。
Excelで =ln(2) とセルに記入すると、0.693...と表示されます。
自然対数とは私もよく知りませんが、調べてみると、
「自然対数」の言葉の一部の "自然"、の語源は2つ見かけます。
意見が分かれているようで、「命名の理由がわからないものの1つ」として覚えておくと良いかもしれません。
「自然対数」の "対数" とは「xp = a」を「p = logxa」と書き表すことができる、というもので「logxa」全体が対数です。
その対数のうち、特に logea を自然対数と言い、特別に lna などと表記し、ここでの計算は ln2 で、ln2 = 0.693 であり、逆に e0.693 = 2 と書き表せます。
e とはネイピア数と言って、円周率と同じような数字だと思えばわかりやすいです。
円周率が 3.14159286… と延々と続くなら、ネイピア数も 2.7182818284… と延々と続きます。
円周率が円の面積を求めたり三角関数で使われるなら、
ネイピア数は金利計算や、いろいろな難しい数学を解く道具として使われているようです。
金利計算や難しい数学で使うものなので、一般人の私たちには縁がない 疎遠な数になっています。
でも、難しい数学を使う人たちの間では「とても便利な数」として親しまれているようです。→●(このページの小題「重要な性質」)
それで、この e がどうして今回の TH や、TL に関わってくるのかというと、
無安定マルチバイブレータ回路について回路の動きについて方程式を作ると
それは微分方程式になり、微分方程式を解こうとすると、ラプラス変換や逆ラプラス変換という手段を使うことになり、
逆ラプラス変換というものを行ったときに、この e が計算式に出てくるようです。→●(このページの小題「導出過程」)
この自然対数というのは、微分方程式を解く際に数学として「とても都合の良い性質」を持っているので「利用している」、という位置づけみたいです。
0.693 は微分方程式を解くために使った数学の道具の痕跡(使用跡?ちょっと語弊があります)のようなものと思えばよいと思います。
(「微分方程式」、「ラプラス変換」という名前を出しましたが、名前を出しただけで私が知っているわけではありません)
…実験でオシロスコープに波形が出たところで、波形の形を計算で求めよう(裏付けしよう)というお話でした。
▲サイトの説明の回路図 | ▲資格試験の回路図 |
左図、サイト説明の Ra が、右図、資格試験の R28 に対応し、Rb が R29 に対応、C が C17 に対応しています。
それで計算すると…
こんな感じで、だいたい合っていますね。
以上のとおり、回路では4Hzの波形を作成して、回路のクロックとして使用している、ということがわかりました。
次回は「単安定マルチバイブレータ回路」を見てみます。
ちなみに、Cの容量は秋月の LCRメーターで確認し、値を上表の実測の計算に使用しました。
C (コンデンサ)を測ると左図画面で、100Hzにおいて 100.30nF と出ました。
100.30nF ≒ 0.1uF (大きな誤差はないと確認)
左の画像リンクをクリックすると 画像を拡大 します。
無安定マルチバイブレータ回路は、555タイマーICを使用したり、2個のトランジスターとコンデンサーを使用したり、NOT論理(インバータ)を使用したりといろいろな方法があるようです。
(訪問者のどんなニーズと この記事がつながるか)
先月は電子回路の話をたくさんしていましたが、ちょっと退屈だったかもしれないので、今日はSVCの新しい試作品を掲載します。
JavaScript CANVAS
先月の冒頭のSVCは宙に浮いていましたが、今回のはキャラが地面に固定されています。
また、スカートを見ると、腰の部分で可動するように工夫してあります。
そのほか、内部のプログラムを見直したり整頓したりと変更しています。
…プログラムを変更した、と簡単に言っていますが、結構大変で苦労しています。(座標計算はいつも とても 苦労します)
もうちょっとバラエティ豊かにデモンストレーション(皆さんに楽しんでもらう)できたら良いですね…。
(訪問者のどんなニーズと この記事がつながるか)
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数
console.log( "文字列" );
}
function Class1() {
//クラス
console.log( "文字列" );
}
Class1.prototype.method1 = function() {
//メソッド
console.log( "文字列" );
}
</script>
</head>
<body onload="onloadx();" style="">
Hello world!<BR>
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数
console.log( "文字列" );
}
function Class1() {
//クラス
console.log( "文字列" );
}
Class1.prototype.method1 = function() {
//メソッド
console.log( "文字列" );
}
</script>
</head>
<body onload="onloadx();" style="">
Hello world!<BR>
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数 コメント変更
console.log( "文字列変更" );
行追加
}
function Class1() {
//クラス コメント変更
console.log( "文字列変更" );
行追加
}
Class1.prototype.method1 = function() {
//メソッド コメント変更
console.log( "文字列変更" );
行追加
}
</script>
</head>
<body onload="onloadx();文字列変更" style="">
Hello world!<BR>
HTML追加
</body>
</html>
<!DOCTYPE html><!--ESCAPEPROCESS-->
<head>
<script>
function onloadx() {
//一般関数 コメント変更
console.log( "文字列変更" );
行追加
}
function Class1() {
//クラス コメント変更
console.log( "文字列変更" );
行追加
}
Class1.prototype.method1 = function() {
//メソッド コメント変更
console.log( "文字列変更" );
行追加
}
</script>
</head>
<body onload="onloadx();文字列変更" style="">
Hello world!<BR>
HTML追加
</body>
</html>